<!--
 * @Description: 翻料处理
-->
<template>
    <div>
        <el-dialog :visible="visible" title="翻料处理" width="1000px" @close="onClose" @open="onOpen">
            <div class="box">
                <el-form ref="form" :model="form" :rules="rules" label-width="120px">
                    <el-form-item label="生产站点：">
                        <span slot="label" class="red">生产站点：</span>
                        <el-select v-model="station" value-key="id" placeholder="请选择">
                            <el-option v-for="item in siteOptions" :key="item.id" :label="item.name" :value="item"></el-option>
                        </el-select>
                    </el-form-item>

                    <div v-if="station.id">
                        <div class="title">翻出信息</div>
                        <el-form-item label="翻料类型：">
                            <span slot="label" class="red">翻料类型：</span>
                            <el-select v-model="turnoverType" placeholder="请选择">
                                <el-option label="余料翻料" value="0"></el-option>
                                <el-option label="其他翻料" value="1"></el-option>
                            </el-select>
                        </el-form-item>
                        <el-form-item v-if="turnoverType === '0'" label="余料翻料信息：">
                            <span slot="label" class="red">余料翻料信息：</span>
                            <el-button class="bottom_all_two" @click="handleSelect(1)">
                                {{selectTurnOut.type == 1 ? selectTurnOut.carNo + '_' + selectTurnOut.outCount : '点击选择'}}
                            </el-button>
                        </el-form-item>
                        <div v-if="turnoverType === '0'">
                            <BlockText :config="turningInfo" :detail="turningInfoData" />
                        </div>
                        <div v-if="turnoverType === '1'">
                            <el-form ref="form" :model="form" :rules="rules" inline label-width="100px" class="demo-ruleForm">
                                <el-form-item label="翻出量：" prop="outCount">
                                    <el-input v-model="form.outCount"></el-input>
                                </el-form-item>
                                <el-form-item label="强度等级：" prop="strengthGradeId">
                                    <el-select v-model="form.strengthGradeId" placeholder="请选择">
                                        <el-option v-for="item in qddj" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="性能等级：">
                                    <el-select v-model="form.performanceGradeId" value-key="id" multiple placeholder="请选择">
                                        <el-option v-for="item in xndj" :key="item.id" :label="item.name" :value="item"></el-option>
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="材料要求：">
                                    <el-select v-model="form.meterialRequirementsId" value-key="id" multiple placeholder="请选择">
                                        <el-option v-for="item in clyq" :key="item.id" :label="item.name" :value="item"></el-option>
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="特殊要求：">
                                    <el-select v-model="form.specialRequirementsId" value-key="id" multiple placeholder="请选择">
                                        <el-option v-for="item in tsyq" :key="item.id" :label="item.name" :value="item"></el-option>
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="其他要求：">
                                    <el-select v-model="form.otherRequirementsId" value-key="id" multiple placeholder="请选择">
                                        <el-option v-for="item in qtyq" :key="item.id" :label="item.name" :value="item"></el-option>
                                    </el-select>
                                </el-form-item>
                                <el-form-item label="外加剂要求：">
                                    <el-select v-model="form.admixtureRequirements" value-key="id" multiple placeholder="请选择">
                                        <el-option v-for="item in wjjyq" :key="item.id" :label="item.name" :value="item"></el-option>
                                    </el-select>
                                </el-form-item>
                            </el-form>
                        </div>
                    </div>
                    <div v-if="turnoverType === '0' && turningInfoData.type || turnoverType === '1' && form.outCount && form.strengthGradeId">
                        <div class="title">翻入信息</div>
                        <el-form-item label="翻入车辆来源：">
                            <span slot="label" class="red">翻入车辆来源：</span>
                            <el-select v-model="carType" placeholder="请选择">
                                <el-option label="余料车辆" value="0"></el-option>
                                <el-option label="排队车辆" value="1"></el-option>
                            </el-select>
                        </el-form-item>
                        <el-form-item v-if="carType" label="选择翻入车辆：">
                            <span slot="label" class="red">选择翻入车辆：</span>
                            <el-button v-if="carType === '0'" class="bottom_all_two" @click="handleSelect(2)">
                                {{selectTurnIn.type == 2 ? selectTurnIn.carNo + '_' + selectTurnIn.residueNum : '点击选择'}}
                            </el-button>
                            <el-button v-if="carType === '1'" class="bottom_all_two" @click="handleSelect(3)">
                                {{selectCar.carNo ? selectCar.carNo + '_' + (selectCar.oddmentsNum || '0') : '点击选择'}}
                            </el-button>
                        </el-form-item>
                    </div>
                </el-form>
            </div>
            
            <span slot="footer" class="dialog-footer">
                <el-button class="bottom_all_two" @click="onClose">取 消</el-button>
                <el-button class="bottom_all" type="primary" @click="onConfirm">保 存</el-button>
            </span>
        </el-dialog>

        <!-- 余料信息 -->
        <CloutInfo :visible.sync="cloutInfoVisible" :config="cloutInfoConfig" @updated="updated"/>
        <!-- 翻料信息确认 -->
        <ComfirmResultDialog :visible.sync="comfirmResultVisible" :config="comfirmResultConfig" @updated="cloutInfoVisible = false" />
    </div>


</template>

<script>
    import BlockText from './BlockText'
    import CloutInfo from './CloutInfo'
    import ComfirmResultDialog from './ComfirmResultDialog'
    import { getUserAutList } from '@/api/common.js'
    import { getLists } from "@/api/smart/schedul/c.js";
    export default {
        components: {
            BlockText,
            CloutInfo,
            ComfirmResultDialog
        },
        data() {
            return {
                station: '', // 站点数据
                turnoverType: '', // 翻料类型
                carType: '', // 翻入车辆类型
                residueTurnOutId: '', // 选择余料翻料时，所选列表数据ID
                logisticsId: '', // 选择余料车辆时，所选列表数据ID
                tankerQueueUpId: '', // 选择排队车辆时，所选车辆ID
                form: {
                    outCount: '', // 翻出量
                    strengthGradeId: '', // 强度等级
                    performanceGradeId: [], // 性能等级（多选）
                    meterialRequirementsId: [], // 材料要求（多选）
                    specialRequirementsId: [], // 特殊要求（多选）
                    otherRequirementsId: [], // 其他要求（多选）
                    admixtureRequirements: [], // 外加剂要求（多选）
                },
                rules: {
                    outCount: [{ required: true, message: '请输入' }],
                    strengthGradeId: [{ required: true, message: '请选择' }]
                },
                siteOptions: [], // 站点选项
                turningInfo: [ // 翻料信息
                    { label: '翻出量', field: 'outCount'},
                    { label: '强度等级', field: 'strengthGradeId'},
                    { label: '性能等级', field: 'performanceGradeId'},
                    { label: '材料要求', field: 'meterialRequirementsId'},
                    { label: '特殊要求', field: 'specialRequirementsId'},
                    { label: '其他要求', field: 'otherRequirementsId'},
                    { label: '外加剂要求', field: 'admixtureRequirements'},
                ],
                turningInfoData: {}, // 翻料数据

                selectTurnOut: {}, // 所选翻出数据
                selectTurnIn: {}, // 所选翻入数据
                selectCar: {}, // 所选排队车辆数据

                qddj: [], // 强度等级
                xndj: [], // 性能等级
                clyq: [], // 材料要求
                tsyq: [], // 特殊要求
                wjjyq: [], // 外加剂要求
                qtyq: [], // 其他要求

                cloutInfoVisible: false,
                cloutInfoConfig: {},
                comfirmResultVisible: false,
                comfirmResultConfig: {}
            };
        },
        props: {
            config: {
                type: Object,
                default: () => ({}),
            },
            visible: {
                type: Boolean,
            },
        },
        methods: {
            // 自定义回调
            updated(data) {
                // type 1:余料翻料信息  2:选择余料车辆 3:选择排队车辆
                if(data.type == 1) {
                    this.selectTurnOut = data;
                    this.turningInfoData = {
                        
                        outCount: data.outCount,
                        strengthGradeId: data.strengthGradeId,
                        performanceGradeId: JSON.parse(data.performanceGradeId).map(item=>item.name).join(','),
                        meterialRequirementsId: JSON.parse(data.meterialRequirementsId).map(item=>item.name).join(','),
                        specialRequirementsId: JSON.parse(data.specialRequirementsId).map(item=>item.name).join(','),
                        otherRequirementsId: JSON.parse(data.otherRequirementsId).map(item=>item.name).join(','),
                        admixtureRequirements: JSON.parse(data.admixtureRequirements).map(item=>item.name).join(',')
                    }
                }
                if(data.type == 2) {
                    this.selectTurnIn = data;
                }
                if(data.type == 3) {
                    this.selectCar = data;
                }
            },
            // 选择数据
            handleSelect(type) {
                // type 1:余料翻料信息  2:选择余料车辆 3:选择排队车辆
                if(!this.station.id) return this.$message.info("请先选择生产站点")
                this.cloutInfoConfig = { type, stationId: this.station.id };
                this.cloutInfoVisible = true;
            },
            // 校验
            verify() {
                if(!this.station.id) {
                    this.$message.info('请选择站点')
                    return false;
                }
                if(!this.turnoverType) {
                    this.$message.info("请选择翻料类型")
                    return false
                }
                if(this.turnoverType === '0') {
                    if(!this.turningInfoData.type) {
                        this.$message.info("请选择翻料数据")
                        return false
                    }
                }
                if(this.turnoverType === '1') {
                    if(!this.form.outCount) {
                        this.$message.info("请输入翻出量")
                        return false
                    }
                    if(!this.form.strengthGradeId) {
                        this.$message.info("请选择强度等级")
                        return false
                    }
                }
                if(this.form.carType === '0') {
                    if(!this.turningResultData.type) {
                        this.$message.info("请选择翻入数据")
                        return false
                    }
                }
                if(this.form.carType === '1') {
                    if(!this.selectCar.type) {
                        this.$message.info("请选择排队车辆数据")
                        return false
                    }
                }
                return true
            },
            // 处理提交数据
            processingData() {
                const params = {
                    stationId: this.station.id || '', // 站点ID,
                    stationName: this.station.name || '', // 站点名
                    turnoverType: this.turnoverType || '', // 翻料类型
                    carType: this.carType || '', // 车辆类型
                }
                if(params.turnoverType === '0' && params.carType === '0') {
                    const q1 = Number(this.selectTurnOut.strengthGradeId.slice(1, this.selectTurnOut.strengthGradeId.length));
                    const q2 = Number(this.selectTurnIn.plan.strengthGradeId.slice(1, this.selectTurnIn.plan.strengthGradeId.length));
                    if(q1 > q2) {
                        params.residueTurnOutId = this.selectTurnOut.id // 所选数据ID
                        params.logisticsId = this.selectTurnIn.id; // 所选数据ID
                        params.carNo = this.selectTurnIn.carNo; // 车牌号
                        params.outCount = this.selectTurnIn.residueNum; // 翻出量
                        params.strengthGradeId = this.selectTurnIn.plan.strengthGradeId // 强度等级
                        params.performanceGradeId = this.selectTurnIn.plan.performanceGradeId || '[]'// 性能等级（多选）
                        params.meterialRequirementsId = this.selectTurnIn.plan.meterialRequirementsId || '[]' // 材料要求（多选）
                        params.specialRequirementsId = this.selectTurnIn.plan.specialRequirementsId || '[]'// 特殊要求（多选）
                        params.otherRequirementsId = this.selectTurnIn.plan.otherRequirementsId || '[]' // 其他要求（多选）
                        params.admixtureRequirements = this.selectTurnIn.plan.admixtureRequirements || '[]'// 外加剂要求（多选）
                    }
                    if(q1 <= q2) {
                        params.residueTurnOutId = this.selectTurnOut.id // 所选数据ID
                        params.logisticsId = this.selectTurnIn.id; // 所选数据ID
                        params.carNo = this.selectTurnOut.carNo; // 车牌号
                        params.outCount = this.selectTurnOut.outCount; // 翻出量
                        params.strengthGradeId = this.selectTurnOut.strengthGradeId // 强度等级
                        params.performanceGradeId = this.selectTurnOut.performanceGradeId || '[]'// 性能等级（多选）
                        params.meterialRequirementsId = this.selectTurnOut.meterialRequirementsId || '[]' // 材料要求（多选）
                        params.specialRequirementsId = this.selectTurnOut.specialRequirementsId || '[]' // 特殊要求（多选）
                        params.otherRequirementsId = this.selectTurnOut.otherRequirementsId || '[]' // 其他要求（多选）
                        params.admixtureRequirements = this.selectTurnOut.admixtureRequirements || '[]' // 外加剂要求（多选）
                    }
                }
                if(params.turnoverType === '1' && params.carType === '0') {
                    const q1 = Number(this.form.strengthGradeId.slice(1, this.form.strengthGradeId.length));
                    const q2 = Number(this.selectTurnIn.plan.strengthGradeId.slice(1, this.selectTurnIn.plan.strengthGradeId.length));
                    if(q1 > q2) {
                        params.logisticsId = this.selectTurnIn.id; // 所选数据ID
                        params.carNo = this.selectTurnIn.carNo; // 车牌号
                        params.outCount = this.selectTurnIn.residueNum; // 翻出量
                        params.strengthGradeId = this.selectTurnIn.plan.strengthGradeId // 强度等级
                        params.performanceGradeId = this.selectTurnIn.plan.performanceGradeId || '[]' // 性能等级（多选）
                        params.meterialRequirementsId = this.selectTurnIn.plan.meterialRequirementsId || '[]' // 材料要求（多选）
                        params.specialRequirementsId = this.selectTurnIn.plan.specialRequirementsId || '[]' // 特殊要求（多选）
                        params.otherRequirementsId = this.selectTurnIn.plan.otherRequirementsId || '[]' // 其他要求（多选）
                        params.admixtureRequirements = this.selectTurnIn.plan.admixtureRequirements || '[]' // 外加剂要求（多选）
                    }
                    if(q1 < q2) {
                        params.logisticsId = this.selectTurnIn.id; // 所选数据ID
                        params.carNo = this.selectTurnIn.carNo; // 车牌号
                        params.outCount = this.form.outCount; // 翻出量
                        params.strengthGradeId = this.form.strengthGradeId // 强度等级
                        params.performanceGradeId = JSON.stringify(this.form.performanceGradeId) || '[]' // 性能等级（多选）
                        params.meterialRequirementsId = JSON.stringify(this.form.meterialRequirementsId) || '[]' // 材料要求（多选）
                        params.specialRequirementsId = JSON.stringify(this.form.specialRequirementsId) || '[]' // 特殊要求（多选）
                        params.otherRequirementsId = JSON.stringify(this.form.otherRequirementsId) || '[]' // 其他要求（多选）
                        params.admixtureRequirements = JSON.stringify(this.form.admixtureRequirements) || '[]' // 外加剂要求（多选）
                    }
                }
                if(params.turnoverType === '0' && params.carType === '1') {
                    params.tankerQueueUpId = this.selectCar.id; // 排队车辆ID
                    params.residueTurnOutId = this.selectTurnOut.id // 所选数据ID
                    params.carNo = this.selectTurnOut.carNo; // 车牌号
                    params.outCount = this.selectTurnOut.outCount; // 翻出量
                    params.strengthGradeId = this.selectTurnOut.strengthGradeId // 强度等级
                    params.performanceGradeId = this.selectTurnOut.performanceGradeId || '[]' // 性能等级（多选）
                    params.meterialRequirementsId = this.selectTurnOut.meterialRequirementsId || '[]' // 材料要求（多选）
                    params.specialRequirementsId = this.selectTurnOut.specialRequirementsId || '[]' // 特殊要求（多选）
                    params.otherRequirementsId = this.selectTurnOut.otherRequirementsId || '[]' // 其他要求（多选）
                    params.admixtureRequirements = this.selectTurnOut.admixtureRequirements || '[]' // 外加剂要求（多选）
                }
                if(params.turnoverType === '1' && params.carType === '1') {
                    params.tankerQueueUpId = this.selectCar.id; // 排队车辆ID
                    params.carNo = this.selectCar.carNo; // 车牌号
                    params.outCount = this.form.outCount; // 翻出量
                    params.strengthGradeId = this.form.strengthGradeId // 强度等级
                    params.performanceGradeId = JSON.stringify(this.form.performanceGradeId) || '[]' // 性能等级（多选）
                    params.meterialRequirementsId = JSON.stringify(this.form.meterialRequirementsId) || '[]' // 材料要求（多选）
                    params.specialRequirementsId = JSON.stringify(this.form.specialRequirementsId) || '[]' // 特殊要求（多选）
                    params.otherRequirementsId = JSON.stringify(this.form.otherRequirementsId) || '[]' // 其他要求（多选）
                    params.admixtureRequirements = JSON.stringify(this.form.admixtureRequirements) || '[]' // 外加剂要求（多选）
                }
                return params;
            },
            async onOpen() {
                this.siteOptions = await getUserAutList(true); // 获取站点选项
                // 获取下拉列表数据
                getLists().then((res) => {
                    res.data.forEach((item) => {
                        if (!item) return
                        if (item.typeName == "强度等级") {
                            this.qddj = item.list;
                        } else if (item.typeName == "规范性能等级") {
                            this.xndj = item.list;  
                        } else if (item.typeName == "材料要求") {
                            this.clyq = item.list;
                        } else if (item.typeName == "特殊要求") {
                            this.tsyq = item.list;
                        } else if (item.typeName == "外加剂要求") {
                            this.wjjyq = item.list;
                        } else if (item.typeName == "其他要求") {
                            this.qtyq = item.list;
                        }
                    });
                });
            },
            onClose() {
                this.$emit("update:visible", false)
            },
            async onConfirm() {
                if(!this.verify()) return;
                const params = this.processingData();
                this.comfirmResultVisible = true;
                this.comfirmResultConfig = params;
            },
        },
    };
</script>
<style lang="scss" scoped>
.box {
    max-height: 600px;
    overflow-y: auto;

    .red {
        color: #FF0000;
    }

    .el-form {
        padding: 0 48px;
    }
    .title {
        font-size: 20px;
        margin: 10px 0;
    }
}
.demo-ruleForm {
    .form-item {
        margin-right: 0;
        width: 50%;
    }
}

</style>